Pythonã®åŒæ°æž¡ãã¡ã«ããºã ãæ·±ãæãäžããæé©åãã¯ããã¯ãããã©ãŒãã³ã¹ãžã®åœ±é¿ãå¹ççãªé¢æ°åŒã³åºãã®ããã®ãã¹ããã©ã¯ãã£ã¹ãæ¢ããŸãã
Pythonã®é¢æ°åŒã³åºãæé©åïŒåŒæ°æž¡ãã¡ã«ããºã ãç¿åŸãã
Pythonã¯ããã®èªã¿ããããšäœ¿ããããã§ç¥ãããŠããŸããããã®åºç€ãšãªãã¡ã«ããºã ã®è€éãããã°ãã°é ããŠããŸããèŠéããããã¡ãªéèŠãªåŽé¢ã®1ã€ã¯ãPythonã颿°åŒã³åºããšåŒæ°æž¡ããã©ã®ããã«åŠçãããã§ãããããã®ã¡ã«ããºã ãçè§£ããããšã¯ãç¹ã«ããã©ãŒãã³ã¹ãéèŠãããã¢ããªã±ãŒã·ã§ã³ãæ±ãéã«ãå¹ççã§æé©åãããPythonã³ãŒããæžãäžã§éåžžã«éèŠã§ãããã®èšäºã§ã¯ãPythonã®åŒæ°æž¡ãã¡ã«ããºã ãå æ¬çã«æ¢æ±ããããé«éã§å¹ççãªé¢æ°ãäœæããããã®æé©åãã¯ããã¯ãšãã¹ããã©ã¯ãã£ã¹ã«é¢ããæŽå¯ãæäŸããŸãã
Pythonã®åŒæ°æž¡ãã¢ãã«ãçè§£ããïŒãªããžã§ã¯ãåç §æž¡ã
倿ž¡ããåç §æž¡ããæ¡çšããäžéšã®èšèªãšã¯ç°ãªããPythonã¯ããªããžã§ã¯ãåç §æž¡ãããšãã衚çŸãããã¢ãã«ã䜿çšããŸããããã¯ãåŒæ°ãä»ããŠé¢æ°ãåŒã³åºããšãã颿°ãåŒæ°ãšããŠæž¡ããããªããžã§ã¯ããžã®åç §ãåãåãããšãæå³ããŸããããã詳ããèŠãŠãããŸãããã
- ãã¥ãŒã¿ãã«ïŒå¯å€ïŒãªããžã§ã¯ã: åŒæ°ãšããŠæž¡ããããªããžã§ã¯ãããã¥ãŒã¿ãã«ïŒäŸïŒãªã¹ããèŸæžãã»ããïŒã§ããå Žåã颿°å ã§è¡ããããªããžã§ã¯ããžã®å€æŽã¯ã颿°ã®å€åŽã®å ã®ãªããžã§ã¯ãã«åæ ãããŸãã
- ã€ãã¥ãŒã¿ãã«ïŒäžå€ïŒãªããžã§ã¯ã: ãªããžã§ã¯ããã€ãã¥ãŒã¿ãã«ïŒäŸïŒæŽæ°ãæååãã¿ãã«ïŒã§ããå Žåã颿°å ã®å€æŽã¯å ã®ãªããžã§ã¯ãã«ã¯åœ±é¿ããŸããã代ããã«ã颿°ã®ã¹ã³ãŒãå ã§æ°ãããªããžã§ã¯ããäœæãããŸãã
éãã説æããããã«ã以äžã®äŸãèããŠã¿ãŸãããã
äŸ1ïŒãã¥ãŒã¿ãã«ïŒå¯å€ïŒãªããžã§ã¯ãïŒãªã¹ãïŒ
def modify_list(my_list):
my_list.append(4)
print("Inside function:", my_list)
original_list = [1, 2, 3]
modify_list(original_list)
print("Outside function:", original_list) # Output: Outside function: [1, 2, 3, 4]
ãã®å Žåãmodify_list颿°ã¯å
ã®original_listã倿ŽããŸãããªããªãããªã¹ãã¯ãã¥ãŒã¿ãã«ã ããã§ãã
äŸ2ïŒã€ãã¥ãŒã¿ãã«ïŒäžå€ïŒãªããžã§ã¯ãïŒæŽæ°ïŒ
def modify_integer(x):
x = x + 1
print("Inside function:", x)
original_integer = 5
modify_integer(original_integer)
print("Outside function:", original_integer) # Output: Outside function: 5
ããã§ã¯ãmodify_integerã¯å
ã®original_integerã倿ŽããŸããã颿°ã®ã¹ã³ãŒãå
ã§æ°ããæŽæ°ãªããžã§ã¯ããäœæãããŸãã
Python颿°ã®åŒæ°ã®çš®é¡
Pythonã«ã¯ãåŒæ°ã颿°ã«æž¡ãããã€ãã®æ¹æ³ããããããããã«ç¬èªã®ç¹åŸŽãšäœ¿çšäŸããããŸãã
1. äœçœ®åŒæ° (Positional Arguments)
äœçœ®åŒæ°ã¯æãäžè¬çãªã¿ã€ãã§ãããããã¯ã颿°å®çŸ©ã«ããããã®äœçœ®ãŸãã¯é åºã«åºã¥ããŠé¢æ°ã«æž¡ãããŸãã
def greet(name, greeting):
print(f"{greeting}, {name}!")
greet("Alice", "Hello") # Output: Hello, Alice!
greet("Hello", "Alice") # Output: Alice, Hello! (Order matters)
åŒæ°ã®é åºã¯éåžžã«éèŠã§ããé åºãæ£ãããªããšã颿°ãäºæããªãçµæãçæãããããšã©ãŒãçºçããããããå¯èœæ§ããããŸãã
2. ããŒã¯ãŒãåŒæ° (Keyword Arguments)
ããŒã¯ãŒãåŒæ°ã䜿çšãããšããã©ã¡ãŒã¿ãŒåãå€ãšãšãã«æç€ºçã«æå®ããŠåŒæ°ãæž¡ãããšãã§ããŸããããã«ããã颿°åŒã³åºããããèªã¿ããããªããé åºã®èª€ãã«ãããšã©ãŒãçºçãã«ãããªããŸãã
def describe_person(name, age, city):
print(f"Name: {name}, Age: {age}, City: {city}")
describe_person(name="Bob", age=30, city="New York")
describe_person(age=25, city="London", name="Charlie") # Order doesn't matter
ããŒã¯ãŒãåŒæ°ã䜿çšãããšãé åºã¯é¢ä¿ãªããã³ãŒãã®æç¢ºããåäžããŸãã
3. ããã©ã«ãåŒæ° (Default Arguments)
ããã©ã«ãåŒæ°ã¯ã颿°åŒã³åºãæã«æç€ºçã«å€ãæž¡ãããªãã£ãå Žåã«ããã©ã¡ãŒã¿ãŒã®ããã©ã«ãå€ãæäŸããŸãã
def power(base, exponent=2):
return base ** exponent
print(power(5)) # Output: 25 (5^2)
print(power(5, 3)) # Output: 125 (5^3)
ããã©ã«ãåŒæ°ã¯ãäœçœ®åŒæ°ã®åŸã«å®çŸ©ããå¿ èŠããããŸãããã¥ãŒã¿ãã«ãªããã©ã«ãåŒæ°ã䜿çšãããšã颿°ãåŒã³åºããããã³ã«ã§ã¯ãªãã颿°ãå®çŸ©ããããšãã«äžåºŠã ãããã©ã«ãå€ãè©äŸ¡ããããããäºæããªãåäœã«ã€ãªããå¯èœæ§ããããŸããããã¯ããããèœãšã穎ã§ãã
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1)) # Output: [1]
print(append_to_list(2)) # Output: [1, 2] (Unexpected!)
ãããé¿ããã«ã¯ãNoneãããã©ã«ãå€ãšããŠäœ¿çšããåŒæ°ãNoneã®å Žåã¯é¢æ°å
ã§æ°ãããªã¹ããäœæããŸãã
def append_to_list_safe(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
print(append_to_list_safe(1)) # Output: [1]
print(append_to_list_safe(2)) # Output: [2] (Correct)
4. å¯å€é·åŒæ° (*args ãš **kwargs)
Pythonã¯ãå¯å€æ°ã®åŒæ°ãåŠçããããã«2ã€ã®ç¹å¥ãªæ§æãæäŸããŸãã
- *args (ä»»æã®æ°ã®äœçœ®åŒæ°): 颿°ã«å¯å€æ°ã®äœçœ®åŒæ°ãæž¡ãããšãã§ããŸãããããã®åŒæ°ã¯ã¿ãã«ã«ãŸãšããããŸãã
- **kwargs (ä»»æã®æ°ã®ããŒã¯ãŒãåŒæ°): 颿°ã«å¯å€æ°ã®ããŒã¯ãŒãåŒæ°ãæž¡ãããšãã§ããŸãããããã®åŒæ°ã¯èŸæžã«ãŸãšããããŸãã
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total
print(sum_numbers(1, 2, 3, 4, 5)) # Output: 15
def describe_person(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
describe_person(name="David", age=40, city="Sydney")
# Output:
# name: David
# age: 40
# city: Sydney
*argsãš**kwargsã¯ãæè»ãªé¢æ°ãäœæããäžã§éåžžã«æ±çšæ§ããããŸãã
åŒæ°æž¡ãã®é åº
è€æ°ã®çš®é¡ã®åŒæ°ãæã€é¢æ°ãå®çŸ©ãããšãã¯ã次ã®é åºã«åŸã£ãŠãã ããã
- äœçœ®åŒæ°
- ããã©ã«ãåŒæ°
- *args
- **kwargs
def my_function(a, b, c=0, *args, **kwargs):
print(f"a={a}, b={b}, c={c}")
print("*args:", args)
print("**kwargs:", kwargs)
my_function(1, 2, 3, 4, 5, x=6, y=7)
# Output:
# a=1, b=2, c=3
# *args: (4, 5)
# **kwargs: {'x': 6, 'y': 7}
ããã©ãŒãã³ã¹ã®ããã®é¢æ°åŒã³åºãã®æé©å
PythonãåŒæ°ãã©ã®ããã«æž¡ãããçè§£ããããšãæåã®ã¹ãããã§ããæ¬¡ã«ãããã©ãŒãã³ã¹ãåäžãããããã®é¢æ°åŒã³åºããæé©åããå®è·µçãªãã¯ããã¯ãæ¢ããŸãããã
1. äžå¿ èŠãªããŒã¿ã³ããŒãæå°éã«æãã
Pythonã¯ãªããžã§ã¯ãåç
§æž¡ãã䜿çšããããã倧ããªããŒã¿æ§é ã®äžå¿
èŠãªã³ããŒãäœæããããšã¯é¿ããŠãã ããã颿°ãããŒã¿ãèªã¿åãã ãã®å Žåãå
ã®ãªããžã§ã¯ããçŽæ¥æž¡ããŸãã倿Žãå¿
èŠãªå Žåã¯ãå
ã®ãªããžã§ã¯ãã倿ŽããŠãåé¡ãªãå Žåããªããžã§ã¯ããã€ã³ãã¬ãŒã¹ã§å€æŽããã¡ãœããïŒäŸïŒsorted(list)ã§ã¯ãªãlist.sort()ïŒã®äœ¿çšãæ€èšããŠãã ããã
2. ã³ããŒã®ä»£ããã«ãã¥ãŒãå©çšãã
NumPyé åãpandas DataFrameãæ±ãéã¯ãããŒã¿ã®ã³ããŒãäœæããã®ã§ã¯ãªãããã¥ãŒã䜿çšããããšãæ€èšããŠãã ããããã¥ãŒã¯è»œéã§ãããå ã®ããŒã¿ãè€è£œããããšãªãããã®äžéšã«ã¢ã¯ã»ã¹ããæ¹æ³ãæäŸããŸãã
import numpy as np
# Creating a view of a NumPy array
arr = np.array([1, 2, 3, 4, 5])
view = arr[1:4] # View of elements from index 1 to 3
view[:] = 0 # Modifying the view modifies the original array
print(arr) # Output: [1 0 0 0 5]
3. é©åãªããŒã¿æ§é ãéžæãã
é©åãªããŒã¿æ§é ãéžæããããšã¯ãããã©ãŒãã³ã¹ã«å€§ãã圱é¿ããå¯èœæ§ããããŸããäŸãã°ãã¡ã³ããŒã·ãããã¹ãã«ã»ããã䜿çšããããšã¯ããªã¹ãã䜿çšãããããã¯ããã«é«éã§ããã»ããã¯ã¡ã³ããŒã·ãããã§ãã¯ã«å¯ŸããŠå¹³åO(1)ã®æéèšç®éãæäŸããŸããããªã¹ãã§ã¯O(n)ã§ãã
import time
# List vs. Set for membership testing
list_data = list(range(1000000))
set_data = set(range(1000000))
start_time = time.time()
999999 in list_data
list_time = time.time() - start_time
start_time = time.time()
999999 in set_data
set_time = time.time() - start_time
print(f"List time: {list_time:.6f} seconds")
print(f"Set time: {set_time:.6f} seconds") # Set time is significantly faster
4. é床ãªé¢æ°åŒã³åºããé¿ãã
颿°åŒã³åºãã«ã¯ãªãŒããŒãããããããŸããããã©ãŒãã³ã¹ãéèŠãªã»ã¯ã·ã§ã³ã§ã¯ãã€ã³ã©ã€ã³ã³ãŒãã®äœ¿çšãã«ãŒãã¢ã³ããŒãªã³ã°ãæ€èšãã颿°åŒã³åºãã®åæ°ãæžãããŠãã ããã
5. çµã¿èŸŒã¿é¢æ°ãšã©ã€ãã©ãªã䜿çšãã
Pythonã®çµã¿èŸŒã¿é¢æ°ãã©ã€ãã©ãªïŒäŸïŒmathãitertoolsãcollectionsïŒã¯é«åºŠã«æé©åãããŠãããå€ãã¯Cèšèªã§æžãããŠããŸããããããæŽ»çšããããšã§ãçŽç²ãªPythonã§åãæ©èœãå®è£
ããããã倧å¹
ãªããã©ãŒãã³ã¹åäžã«ã€ãªãããŸãã
import math
# Using math.sqrt() instead of manual implementation
def calculate_sqrt(num):
return math.sqrt(num)
6. ã¡ã¢åãæŽ»çšãã
ã¡ã¢åã¯ãã³ã¹ãã®ããã颿°åŒã³åºãã®çµæããã£ãã·ã¥ããåãå ¥åãå床çºçãããšãã«ãã£ãã·ã¥ãããçµæãè¿ããã¯ããã¯ã§ããããã«ãããåãåŒæ°ã§ç¹°ãè¿ãåŒã³åºããã颿°ã®ããã©ãŒãã³ã¹ãåçã«åäžãããããšãã§ããŸãã
import functools
@functools.lru_cache(maxsize=None) # lru_cache provides memoization
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # The first call is slower, subsequent calls are much faster
7. ã³ãŒãã®ãããã¡ã€ãªã³ã°
æé©åã詊ã¿ãåã«ãã³ãŒãããããã¡ã€ã«ããŠããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŠãã ãããPythonã«ã¯ãcProfileã®ãããªããŒã«ãline_profilerã®ãããªã©ã€ãã©ãªããããã³ãŒãã®äžã§æãæéãæ¶è²»ããé åãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
import cProfile
def my_function():
# Your code here
pass
cProfile.run('my_function()')
8. CythonãŸãã¯Numbaãæ€èšãã
èšç®éçŽåã¿ã¹ã¯ã«ã¯ãCythonãŸãã¯Numbaã®äœ¿çšãæ€èšããŠãã ãããCythonã¯ãCèšèªã«ã³ã³ãã€ã«ãããPythonã©ã€ã¯ãªã³ãŒããäœæã§ããå€§å¹ ãªããã©ãŒãã³ã¹åäžããããããŸããNumbaã¯ãç¹ã«æ°å€èšç®ã«ãããŠPythonã³ãŒããèªåçã«æé©åã§ãããžã£ã¹ãã€ã³ã¿ã€ã ïŒJITïŒã³ã³ãã€ã©ã§ãã
# Using Numba to accelerate a function
from numba import jit
@jit(nopython=True)
def my_numerical_function(data):
# Your numerical computation here
pass
ã°ããŒãã«ãªèæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«Pythonã³ãŒããäœæããéã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããã
- Unicode察å¿: ããŸããŸãªèšèªãæåã»ããããµããŒãããããã«ãã³ãŒããUnicodeæåãæ£ããåŠçããããã«ããŸãã
- ããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒl10nïŒãšåœéåïŒi18nïŒ:
gettextã®ãããªã©ã€ãã©ãªã䜿çšããŠãè€æ°ã®èšèªããµããŒãããã¢ããªã±ãŒã·ã§ã³ãç°ãªãå°åèšå®ã«é©å¿ãããŸãã - ã¿ã€ã ãŸãŒã³: æ¥ä»ãšæå»ãæ±ãéã«ã¯ã
pytzã©ã€ãã©ãªã䜿çšããŠã¿ã€ã ãŸãŒã³å€æãæ£ããåŠçããŸãã - é貚ãã©ãŒããã:
babelã®ãããªã©ã€ãã©ãªã䜿çšããŠãç°ãªãå°åæšæºã«åŸã£ãŠé貚ããã©ãŒãããããŸãã - æåçæåæ§: ã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãã³ã³ãã³ããèšèšããéã«ã¯ãæåçãªéãã«é æ ®ããŸãã
ã±ãŒã¹ã¹ã¿ãã£ãšäŸ
ã±ãŒã¹ã¹ã¿ãã£1ïŒããŒã¿åŠçãã€ãã©ã€ã³ã®æé©å
æ±äº¬ã«ããäŒæ¥ããæ§ã ãªå Žæããåéãããã»ã³ãµãŒããŒã¿ã®å€§èŠæš¡ãªããŒã¿ã»ãããåŠçããŠããŸããå ã®Pythonã³ãŒãã¯ãããŒã¿ã®é床ãªã³ããŒãšéå¹çãªã«ãŒãã®ããã«é å»¶ããŠããŸãããNumPyãã¥ãŒããã¯ãã«åãNumbaã䜿çšããããšã§ãåŠçæéã50åã®1ã«ççž®ããããšãã§ããŸããã
ã±ãŒã¹ã¹ã¿ãã£2ïŒWebã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹åäž
ãã«ãªã³ã®Webã¢ããªã±ãŒã·ã§ã³ã¯ãéå¹çãªããŒã¿ããŒã¹ã¯ãšãªãšé床ãªé¢æ°åŒã³åºãã®ããã«å¿çæéãé å»¶ããŠããŸãããããŒã¿ããŒã¹ã¯ãšãªã®æé©åããã£ãã·ã¥ã®å®è£ ãããã³ããã©ãŒãã³ã¹ãéèŠãªã³ãŒãéšåãžã®Cythonã®äœ¿çšã«ãããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãå€§å¹ ã«æ¹åããããšãã§ããŸããã
çµè«
Pythonã®åŒæ°æž¡ãã¡ã«ããºã ãç¿åŸããæé©åãã¯ããã¯ãé©çšããããšã¯ãå¹ççã§ã¹ã±ãŒã©ãã«ãªPythonã³ãŒããæžãäžã§äžå¯æ¬ ã§ãããªããžã§ã¯ãåç §æž¡ãã®ãã¥ã¢ã³ã¹ãçè§£ããé©åãªããŒã¿æ§é ãéžæããçµã¿èŸŒã¿é¢æ°ã掻çšããã³ãŒãããããã¡ã€ãªã³ã°ããããšã§ãPythonã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã倿§ãªåœéçãªãªãŒãã£ãšã³ã¹åãã®ãœãããŠã§ã¢ãéçºããéã«ã¯ãã°ããŒãã«ãªãã¹ããã©ã¯ãã£ã¹ãèæ ®ããããšãå¿ããªãã§ãã ããã
ãããã®ååãç±å¿ã«é©çšããã³ãŒããæŽç·Žããæ¹æ³ãç¶ç¶çã«æ¢æ±ããããšã§ãPythonã®å¯èœæ§ãæå€§éã«åŒãåºãããšã¬ã¬ã³ãã§é«æ§èœãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããããããŒã³ãŒãã£ã³ã°ïŒ